import path from 'path';
import type { UserConfig } from 'vite';
import { defineConfig, loadEnv } from 'vite';

import {
  createBuild,
  createCss,
  createDefine,
  createEsbuild,
  createPlugins,
  createServe
} from './build';

// https://vitejs.dev/config/
export default defineConfig(({ mode }): UserConfig => {
  const charAt = `                                                      
    ,---,                  ,--,      ,--,               
  ,--.' |                ,--.'|    ,--.'|               
  |  |  :                |  | :    |  | :       ,---.   
  :  :  :                :  : '    :  : '      '   ,'\\  
  :  |  |,--.    ,---.   |  ' |    |  ' |     /   /   | 
  |  :  '   |   /     \\  '  | |    '  | |    .   ; ,. : 
  |  |   /' :  /    /  | |  | :    |  | :    '   | |: : 
  '  :  | | | .    ' / | '  : |__  '  : |__  '   | .; : 
  |  |  ' | : '   ;   /| |  | '.'| |  | '.'| |   :    | 
  |  :  :_:,' '   |  / | ;  :    ; ;  :    ;  \\   \\  /  
  |  | ,'     |   :    | |  ,   /  |  ,   /    \`----'   
  \`--''        \\   \\  /   ---\`-'    ---\`-'              
                \`----'                                  
  `;
  console.info(`%c${charAt}`, 'color: #5BE49B');
  const env = loadEnv(mode, process.cwd());
  return {
    plugins: [createPlugins()],
    css: createCss(),
    define: createDefine(),
    build: createBuild(),
    resolve: {
      alias: {
        '@': path.join(__dirname, './src')
      },
      extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json']
    },
    server: createServe(env),
    esbuild: createEsbuild(env)
  };
});
